package cinema.v1_1;

import cinema.v1_1.model.*;
import cinema.v1_1.service.DataStore;
import cinema.v1_1.util.MD5Util;

import java.time.LocalDateTime;
import java.util.*;
import java.util.UUID;

public class MainV1_1 {
    private static final Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        init();   // 首次运行自动建 data 目录 + 内置数据

        while (true) {
            System.out.println("\n=== 万东电影院 1.1 控制台 ===");
            System.out.println("1 登录");
            System.out.println("2 查看所有用户");
            System.out.println("3 查看所有影厅");
            System.out.println("4 查看所有影片");
            System.out.println("5 查看所有场次");
            System.out.println("0 退出");
            System.out.print("请选择: ");
            String cmd = sc.nextLine().trim();

            switch (cmd) {
                case "1" -> login();
                case "2" -> listUsers();
                case "3" -> listHalls();
                case "4" -> listMovies();
                case "5" -> listSessions();
                case "0" -> {
                    System.out.println("感谢使用，再见！");
                    return;
                }
                default -> System.out.println("输入错误，请重试！");
            }
        }
    }

    /* ---------- 登录 ---------- */
    private static void login() {
        System.out.print("用户名: ");
        String name = sc.nextLine().trim();
        System.out.print("密码: ");
        String pwd = sc.nextLine().trim();

        boolean ok = DataStore.loadUsers().stream()
                .anyMatch(u -> u.getName().equals(name) && u.getPwdMd5().equals(MD5Util.md5(pwd)));
        System.out.println(ok ? "登录成功！" : "用户名或密码错误！");
    }

    /* ---------- 列表展示 ---------- */
    private static void listUsers() {
        System.out.println("\n--- 用户列表 ---");
        DataStore.loadUsers().forEach(u ->
                System.out.printf("%s | %s | %s | %s%n",
                        u.getId(), u.getName(), u.getType(), u.getPhone()));
    }

    private static void listHalls() {
        System.out.println("\n--- 影厅列表 ---");
        DataStore.loadHalls().forEach(h ->
                System.out.printf("%s | %s | %d排%d列 | 座位数%d%n",
                        h.getId(), h.getName(), h.getRows(), h.getCols(), h.getSeatCount()));
    }

    private static void listMovies() {
        System.out.println("\n--- 影片列表 ---");
        DataStore.loadMovies().forEach(m ->
                System.out.printf("%s | %s | %d分钟 | %.1f分%n",
                        m.getId(), m.getName(), m.getDuration(), m.getScore()));
    }

    private static void listSessions() {
        System.out.println("\n--- 场次列表 ---");
        DataStore.loadSessions().forEach(s ->
                System.out.printf("%s | 影片%s | 影厅%s | %s | ￥%.2f%n",
                        s.getId(), s.getMovieId(), s.getHallId(), s.getStartTime(), s.getPrice()));
    }

    /* ---------- 首次运行时初始化 ---------- */
    private static void init() {
        java.io.File dir = new java.io.File("data");
        if (!dir.exists()) dir.mkdirs();

        /* 用户 */
        if (DataStore.loadUsers().isEmpty()) {
            List<User> users = new ArrayList<>();
            users.add(new User(UUID.randomUUID().toString(), "admin",
                    MD5Util.md5("ynuinfo#777"), "ADMIN",
                    "13800000000", LocalDateTime.now().toString()));
            DataStore.saveUsers(users);
        }

        /* 影厅 */
        if (DataStore.loadHalls().isEmpty()) {
            List<Hall> halls = new ArrayList<>();
            halls.add(new Hall(UUID.randomUUID().toString(), "黄金厅", 8, 10));
            halls.add(new Hall(UUID.randomUUID().toString(), "白银厅", 10, 12));
            halls.add(new Hall(UUID.randomUUID().toString(), "翡翠厅", 7, 8));
            halls.add(new Hall(UUID.randomUUID().toString(), "钻石厅", 7, 8));
            halls.add(new Hall(UUID.randomUUID().toString(), "宝石厅", 8, 9));
            DataStore.saveHalls(halls);
        }

        /* 影片 */
        if (DataStore.loadMovies().isEmpty()) {
            List<Movie> movies = new ArrayList<>();
            movies.add(new Movie(UUID.randomUUID().toString(), "泰坦尼克号",
                    "詹姆斯·卡梅隆", "莱昂纳多·迪卡普里奥 / 凯特·温斯莱特",
                    "穷画家与贵族少女的爱情悲剧", 194, 9.5));
            movies.add(new Movie(UUID.randomUUID().toString(), "流浪地球",
                    "郭帆", "吴京 / 屈楚萧 / 李光洁",
                    "人类带着地球逃离太阳系", 125, 8.0));
            DataStore.saveMovies(movies);
        }

        /* 场次（示例） */
        if (DataStore.loadSessions().isEmpty()) {
            List<Session> sessions = new ArrayList<>();
            String today = java.time.LocalDate.now().toString();
            sessions.add(new Session(UUID.randomUUID().toString(),
                    DataStore.loadMovies().get(0).getId(),
                    DataStore.loadHalls().get(0).getId(),
                    today + " 19:30", 45.0));
            sessions.add(new Session(UUID.randomUUID().toString(),
                    DataStore.loadMovies().get(1).getId(),
                    DataStore.loadHalls().get(1).getId(),
                    today + " 20:00", 40.0));
            DataStore.saveSessions(sessions);
        }
    }
}
